; In ZCMD29 and ZCMD30B ( and maybe earlier versions), the REN internal,
; when executed with:
;
; REN FN.EXT=FN1.EXT
;
; had the quirk of asking for deletion of FN.EXT (if it existed) before
; it checked for existence of FN1.EXT. Well, needless to say if
; FN1 did not exist, you ended up deleting FN before you ever found out
; about it.
;
; Thanks to Bob Kramer of RI-RCPM for pointing this out to me.

; Eugene Nolan
; 5/27/88


; The following is a cut of the code to replace for EXTEST and REN
; in ZCMD29/30B if you use the internal REN facility. SAVE internal will
; still function normally.

;.....
;
;
; Test file in FCB for existence, ask user to delete if so, and abort if
; he chooses not to.
;
         IF     SAVEON OR RENON ; For save and ren functions
EXTEST: CALL    EXTEST2
        RZ                      ; Ok if not found
EXTEST1:
        PUSH    D               ; Save pointer to FCB
        PUSH    D
        CALL    PRINTC
        DB      'Erase',' '+80H
        POP     H               ; H now points at FCBDx
        INX     H               ; up to name field
        CALL    PRFN            ; Print it
        MVI     A,'?'           ; Print question
        CALL    CONOUT
        CALL    CONIN           ; Get response
        POP     D               ; Get ptr to fcb
        CPI     'Y'             ; Key on yes
        JNZ     ERR3            ; Restart as error if no
        PUSH    D               ; Save ptr to fcb
        CALL    DELETE          ; Delete file
        POP     D               ; Get ptr to fcb
        RET
EXTEST2:
        CALL    SCANLOG         ; Extract file name and log in user/disk
        JNZ     ERROR           ; '?' is not permitted
        CALL    SEARF           ; Look for specified file
        LXI     D,FCBDN         ; Point to file FCB
        RET
         ENDIF                  ; SAVEON OR RENON
;.....
;
;
; Section:  5F
; Command:  REN
; Function: To change the name of an existing file
; Forms:
;       REN <new UFN>=<old UFN> perform function
;
         IF     RENON           ; REN enabled?
REN:     IF     WREN            ; Wheel facility?
        CALL    WHLCHK          ; Check for wheel byte
         ENDIF                  ; WREN
;
        CALL    EXTEST2         ; Test for existence only
        PUSH    PSW             ; save flags to say yes/no


        LDA     TEMPDR          ; Save selected disk
        PUSH    PSW             ; Save on stack
;
REN0:   LXI     H,FCBDN         ; Save new file name
        LXI     D,FCBDM
        LXI     B,16            ; 16 bytes
        LDIR
        CALL    ADVAN           ; Advance to next character (non-delim)
        JRZ     REN4            ; Error if none
;
;
; Perform rename function
;
REN1:   SDED    NXTCHR          ; Save pointer to old file name
        CALL    SCANER          ; Extract FILENAME.TYP token
        JRNZ    REN4            ; Error if any '?'
        POP     PSW             ; Get old default drive
        MOV     B,A             ; Save it
        LXI     H,TEMPDR        ; Compare it against selected drive
        MOV     A,M             ; Default?
        ORA     A
        JRZ     REN2
        CMP     B               ; Check for drive error
        JRNZ    REN4
;
REN2:   MOV     M,B
        XRA     A
        STA     FCBDN           ; Set default drive
        POP     PSW             ; Get back existence flag
        JRZ     REN2A           ; Z=none
        CALL    SEARF           ; Look for source file
        JRZ     REN3            ; Z=not here
        LXI     D,FCBDM         ; Source and destination both here, query erase
        CALL    EXTEST1
REN2A:
        LXI     D,FCBDN         ; Rename file
        MVI     C,17H           ; BDOS rename FCT
        CALL    GRBDOS
        RNZ
;
REN3:   CALL    PRNNF           ; Print NO FILE message
;
REN4:   JMP     ERROR
         ENDIF                  ; RENON
;
